2666. Половина

 

Заполните массив n × n следующим образом: на побочной диагонали стоят нули, выше диагонали двойки, ниже единицы.

 

Вход. Одно натуральное число n (n ≤ 20).

 

Выход.  Выведите массив, заполненный по указанному правилу.

 

Пример входа

Пример выхода

3

220

201

011

 

 

РЕШЕНИЕ

массивы

 

Анализ алгоритма

Заполняем двумерный массив при помощи двойного цикла как указано в задаче.

Ячейка (i, j) лежит:

·        на побочной диагонали, если i + j = n – 1;

·        ниже побочной диагонали, если i + j > n – 1;

·        выше побочной диагонали, если i + j < n – 1;

 

Реализация алгоритма

Объявим рабочий двумерный массив.

 

#define MAX 30

int m[MAX][MAX];

 

Читаем входные данные. Заполняем массив.

 

scanf("%d",&n);

for(i = 0; i < n; i++)

for(j = 0; j < n; j++)

  if (i + j == n - 1) m[i][j] = 0; else

  if (i + j < n - 1)  m[i][j] = 2; else m[i][j] = 1;

   

Выводим двумерный массив.

 

for(i = 0; i < n; i++)

{

  for(j = 0; j < n; j++)

    printf("%d",m[i][j]);

  printf("\n");

}

 

Algorithm realization – double pointer

 

#include <stdio.h>

 

int **m;

int i, j, n;

 

int main(void)

{

  scanf("%d", &n);

  m = new int* [n];

  for (i = 0; i < n; i++)

    m[i] = new int[n];

 

  for (i = 0; i < n; i++)

  for (j = 0; j < n; j++)

    if (i + j == n - 1) m[i][j] = 0; else

    if (i + j < n - 1)  m[i][j] = 2; else m[i][j] = 1;

 

 

  for (i = 0; i < n; i++)

  {

    for (j = 0; j < n; j++)

      printf("%d", m[i][j]);

    printf("\n");

  }

 

  delete[] m;

  return 0;

}

 

Algorithm realization – calloc

 

#include <stdio.h>

#include <malloc.h>

 

int **m;

int i, j, n;

 

int main(void)

{

  scanf("%d", &n);

  m = (int**)calloc(n, sizeof(int*));

  for (i = 0; i < n; i++)

    m[i] = (int*)calloc(n, sizeof(int));

 

  for (i = 0; i < n; i++)

  for (j = 0; j < n; j++)

    if (i + j == n - 1) m[i][j] = 0; else

    if (i + j < n - 1)  m[i][j] = 2; else m[i][j] = 1;

 

  for (i = 0; i < n; i++)

  {

    for (j = 0; j < n; j++)

      printf("%d", m[i][j]);

    printf("\n");

  }

 

  for (i = 0; i < n; i++)

    free(m[i]);

  free(m);

  return 0;

}

 

Java реализация

 

import java.util.*;

 

public class Main

{

  public static void main(String[] args)

  {

    Scanner con = new Scanner(System.in);

    int n = con.nextInt();

    int m[][] = new int[n][n];

   

    for(int i = 0; i < n; i++)

    for(int j = 0; j < n; j++)

      if (i + j == n - 1) m[i][j] = 0; else

      if (i + j < n - 1)  m[i][j] = 2; else m[i][j] = 1;

 

    for(int i = 0; i < n; i++)

    {

      for(int j = 0; j < n; j++)

        System.out.print(m[i][j]);

      System.out.println();

    }

    con.close();

  }

}

 

Java реализация – двумерный ArrayList

 

import java.util.*;

 

public class Main

{

  public static void main(String[] args)

  {

    Scanner con = new Scanner(System.in);

    int n = con.nextInt();

    ArrayList<ArrayList<Integer>> m =

             new ArrayList<ArrayList<Integer>>();

 

    for(int i = 0; i < n; i++)

      m.add(new ArrayList<Integer>());

   

    for(int i = 0; i < n; i++)

    for(int j = 0; j < n; j++)

      if (i + j == n - 1) m.get(i).add(0); else

      if (i + j < n - 1)  m.get(i).add(2); else m.get(i).add(1);

           

    for(int i = 0; i < n; i++)

    {

      for(int j = 0; j < n; j++)

        System.out.print(m.get(i).get(j));

      System.out.println();

    }

    con.close();

  }

}

 

Java реализация – массив ArrayList

 

import java.util.*;

 

public class Main

{

  public static void main(String[] args)

  {

    Scanner con = new Scanner(System.in);

    int n = con.nextInt();

    ArrayList<Integer>[] m = new ArrayList[n];

    for(int i = 0; i < n; i++)

      m[i] = new ArrayList<Integer>();

   

    for(int i = 0; i < n; i++)

    for(int j = 0; j < n; j++)

      if (i + j == n - 1) m[i].add(0); else

      if (i + j < n - 1)  m[i].add(2); else m[i].add(1);

           

    for(int i = 0; i < n; i++)

    {

      for(int j = 0; j < n; j++)

        System.out.print(m[i].get(j));

      System.out.println();

    }

    con.close();

  }

}

 

Python реализация

 

n = int(input())

 

def char(i, j):

  if i < j:

    return '2'

  if i == j:

    return '0'

  return '1'

 

for i in range(n):

  print (''.join(reversed([char(i,j) for j in range(n)])))

 

Python реализация построение матрицы

 

n = int(input())

 

def char(i, j):

  if i + j < n - 1:

    return '2'

  elif i + j == n - 1:

    return '0'

  else: return '1'

 

a = []

for i in range(n):

  a.append(''.join([char(i,j) for j in range(n)]))

 

for i in range(n):

  print(a[i])